<?php

// 用户传入的m3u8地址
$url = $_GET['url'];

// 判断请求地址的开头部分，部分资源存在不容二级域名调用的情况可以采用这段进行判断，如果没有则自行删除这个判断
if (strpos($url, 'https://多域名1') === 0) {
    $domain = 'https://多域名1';
} elseif (strpos($url, 'https://多域名2') === 0) {
    $domain = 'https://多域名2';
} else {
    // 其他情况处理
    // ...

    // 示例中将 $domain 设置为空字符串
    $domain = '';
}
//判断结束
if (!empty($domain)) {
    // 解析地址，提取日期和参数值
    preg_match('/(\d{8})\/(\w+)\//', $url, $matches);
    $date = isset($matches[1]) ? $matches[1] : "";
    $param = isset($matches[2]) ? $matches[2] : "";

    // 构建新的m3u8地址。这里每个资源站是不同的
    $newUrl = $domain . "{$date}/{$param}/1000kb/hls/index.m3u8";

    function generateRandomIP()
    {
        $ip = rand(1, 255) . '.' . rand(0, 255) . '.' . rand(0, 255) . '.' . rand(0, 255);
        return $ip;
    }

    $ip = generateRandomIP();

    // 设置cURL选项
    $curl = curl_init($newUrl);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('REMOTE_ADDR: ' . $ip, 'HTTP_X_FORWARDED_FOR: ' . $ip));

    // 发送请求并获取m3u8内容
    $response = curl_exec($curl);

    // 检查请求是否成功
    if ($response === false) {
        $error = curl_error($curl);
        // 处理错误信息
        $response = array(
            'status' => 'no',
            'url' => ""
        );
    } else {
        // 判断文件是否存在
        if (strpos($response, 'file not found') !== false) {
            // 重新构建新的m3u8地址；不同大小的资源可能存在不同kb的大小限制，导致地址不同加了判断
            $newUrl = $domain . "{$date}/{$param}/2000kb/hls/index.m3u8";

            // 设置cURL选项
            curl_setopt($curl, CURLOPT_URL, $newUrl);

            // 重新发送请求并获取m3u8内容
            $response = curl_exec($curl);
        }

        // 检查请求是否成功
        if ($response === false) {
            $error = curl_error($curl);
            // 处理错误信息
            $response = array(
                'status' => 'no',
                'url' => ""
            );
        } else {
            // 提取有效的m3u8内容
            $startIndex = strpos($response, "#EXT-X-DISCONTINUITY");
            $endIndex = strpos($response, "#EXT-X-ENDLIST");
            $extractedM3u8 = substr($response, $startIndex, $endIndex - $startIndex + strlen("#EXT-X-ENDLIST"));

            // 替换ts地址为完整的地址
            $riqi = "/{$date}/";
            $dizi = $domain . "{$date}/";
            $modifiedM3u8 = str_replace($riqi, $dizi, $extractedM3u8);

            // 构建完整的m3u8文件，可根据一个进行自定义
            $finalM3u8 = "#EXTM3U\r\n";
            $finalM3u8 .= "#EXT-X-VERSION:3\r\n";
            $finalM3u8 .= "#EXT-X-TARGETDURATION:6\r\n";
            $finalM3u8 .= "#EXT-X-PLAYLIST-TYPE:VOD\r\n";
            $finalM3u8 .= "#EXT-X-MEDIA-SEQUENCE:0\r\n";
            $finalM3u8 .= "#EXT-X-KEY:METHOD=NONE\r\n";
            $finalM3u8 .= $modifiedM3u8;

            // 缓存文件路径
            $cacheFolder = "kuaileya/";
            $cacheFile = $cacheFolder . "{$param}.m3u8";

            // 保存到缓存文件夹
            file_put_contents($cacheFile, $finalM3u8);

            // 返回最新的缓存地址
            $cacheUrl = "https://你的域名/{$cacheFile}";

            // 返回响应
            $response = array(
                'status' => 'success',
                'upurl' => $url,
                'downurl' => $newUrl,
                'url' => $cacheUrl
            );
        }
    }

    curl_close($curl);
} else {
    $response = array(
        'status' => 'error',
        'message' => 'Invalid URL'
    );
}

header('Content-Type: application/json');
echo json_encode($response);
